package com.ruoyi.common.utils.tt;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class FaviconFetcher {

    /**
     * 获取网页的图标 URL
     * @param url 网页 URL
     * @return 图标 URL，如果找不到则返回 null
     */
    // 添加超时设置（毫秒）
    private static final int TIMEOUT = 5000;

    public static String getFaviconUrl(String url) {
        try {
            URI baseUri = new URI(url);
            String baseUrl = baseUri.getScheme() + "://" + baseUri.getHost();
            if (baseUri.getPort() != -1) {
                baseUrl += ":" + baseUri.getPort();
            }

            // 优化1：添加超时设置
            Document doc = Jsoup.connect(url)
                    .timeout(TIMEOUT)
                    .followRedirects(true)
                    .get();

            // 优化2：合并选择器查询
            Element favicon = doc.select("link[rel~=(?i)icon], link[rel~=(?i)apple-touch-icon]").first();

            if (favicon != null) {
                String href = favicon.attr("abs:href"); // 使用abs:href自动转换为绝对URL
                if (href != null && !href.isEmpty()) {
                    return href;
                }
            }

            // 优化3：直接返回默认favicon位置，不再尝试解析
            return baseUrl + "/favicon.ico";

        } catch (Exception e) {
            // 优化4：快速失败，直接返回默认位置
            try {
                URI uri = new URI(url);
                return uri.getScheme() + "://" + uri.getHost() + "/favicon.ico";
            } catch (URISyntaxException ex) {
                return null;
            }
        }
    }

    public static void main(String[] args) {
        // 测试示例
        String[] testUrls = {
                "https://www.google.com",
                "https://github.com",
                "https://stackoverflow.com"
        };

        for (String url : testUrls) {
            String faviconUrl = getFaviconUrl(url);
            System.out.println("网站: " + url);
            System.out.println("图标: " + faviconUrl);
            System.out.println();
        }
    }
}
